www.gusucode.com > C++ 图像分割源代码 > C++ 图像分割源代码/gusucode/seg_source/CimplTypes.cpp
//Download by http://www.NewXing.com //Copyright (c) 2004-2005, Baris Sumengen //All rights reserved. // // CIMPL Matrix Performance Library // //Redistribution and use in source and binary //forms, with or without modification, are //permitted provided that the following //conditions are met: // // * No commercial use is allowed. // This software can only be used // for non-commercial purposes. This // distribution is mainly intended for // academic research and teaching. // * Redistributions of source code must // retain the above copyright notice, this // list of conditions and the following // disclaimer. // * Redistributions of binary form must // mention the above copyright notice, this // list of conditions and the following // disclaimer in a clearly visible part // in associated product manual, // readme, and web site of the redistributed // software. // * Redistributions in binary form must // reproduce the above copyright notice, // this list of conditions and the // following disclaimer in the // documentation and/or other materials // provided with the distribution. // * The name of Baris Sumengen may not be // used to endorse or promote products // derived from this software without // specific prior written permission. // //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT //HOLDERS AND CONTRIBUTORS "AS IS" AND ANY //EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT //NOT LIMITED TO, THE IMPLIED WARRANTIES OF //MERCHANTABILITY AND FITNESS FOR A PARTICULAR //PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE //CONTRIBUTORS BE LIABLE FOR ANY //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, //EXEMPLARY, OR CONSEQUENTIAL DAMAGES //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT //OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, //DATA, OR PROFITS; OR BUSINESS INTERRUPTION) //HOWEVER CAUSED AND ON ANY THEORY OF //LIABILITY, WHETHER IN CONTRACT, STRICT //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR //OTHERWISE) ARISING IN ANY WAY OUT OF THE USE //OF THIS SOFTWARE, EVEN IF ADVISED OF THE //POSSIBILITY OF SUCH DAMAGE. #include "./CimplTypes.h" namespace CIMPL { Vector<ComplexFloat> ToComplexFloat(Vector<float> &m) { int l = m.Length(); Vector<ComplexFloat> temp(l); for(int i=0; i<l; i++) { temp[i] = ComplexFloat(m[i],0); } return temp; } Matrix<ComplexFloat> ToComplexFloat(Matrix<float> &m) { int r = m.Rows(); int c = m.Columns(); int l = m.Length(); Matrix<ComplexFloat> temp(r,c); for(int i=0; i<l; i++) { temp.ElemNC(i) = ComplexFloat(m.ElemNC(i),0); } return temp; } Vector<ComplexDouble> ToComplexDouble(Vector<double> &m) { int l = m.Length(); Vector<ComplexDouble> temp(l); for(int i=0; i<l; i++) { temp[i] = ComplexDouble(m[i],0); } return temp; } Matrix<ComplexDouble> ToComplexDouble(Matrix<double> &m) { int r = m.Rows(); int c = m.Columns(); int l = m.Length(); Matrix<ComplexDouble> temp(r,c); for(int i=0; i<l; i++) { temp.ElemNC(i) = ComplexDouble(m.ElemNC(i),0); } return temp; } Vector<ComplexDouble> ToComplexDouble(Vector<ComplexFloat> &m) { int l = m.Length(); Vector<ComplexDouble> temp(l); for(int i=0; i<l; i++) { temp[i] = (ComplexDouble)m[i]; } return temp; } Matrix<ComplexDouble> ToComplexDouble(Matrix<ComplexFloat> &m) { int r = m.Rows(); int c = m.Columns(); int l = m.Length(); Matrix<ComplexDouble> temp(r,c); for(int i=0; i<l; i++) { temp.ElemNC(i) = (ComplexDouble) m.ElemNC(i); } return temp; } Vector<ComplexFloat> Complex(Vector<float> &real, Vector<float> &imag) { if(real.Length() != imag.Length()) { cerr << "Line: " << __LINE__ << " File: " << __FILE__ << endl; Utility::RunTimeError("Dimensions does not match!"); } int l = real.Length(); Vector<ComplexFloat> temp(l); for(int i=0; i<l; i++) { temp[i] = ComplexFloat(real[i], imag[i]); } return temp; } Vector<ComplexDouble> Complex(Vector<double> &real, Vector<double> &imag) { if(real.Length() != imag.Length()) { cerr << "Line: " << __LINE__ << " File: " << __FILE__ << endl; Utility::RunTimeError("Dimensions does not match!"); } int l = real.Length(); Vector<ComplexDouble> temp(l); for(int i=0; i<l; i++) { temp[i] = ComplexDouble(real[i], imag[i]); } return temp; } Matrix<ComplexFloat> Complex(Matrix<float> &real, Matrix<float> &imag) { if(real.Rows() != imag.Rows() || real.Columns() != imag.Columns()) { cerr << "Line: " << __LINE__ << " File: " << __FILE__ << endl; Utility::RunTimeError("Dimensions does not match!"); } int r = real.Rows(); int c = real.Columns(); int l = real.Length(); Matrix<ComplexFloat> temp(r,c); for(int i=0; i<l; i++) { temp.ElemNC(i) = ComplexFloat(real.ElemNC(i), imag.ElemNC(i)); } return temp; } Matrix<ComplexDouble> Complex(Matrix<double> &real, Matrix<double> &imag) { if(real.Rows() != imag.Rows() || real.Columns() != imag.Columns()) { cerr << "Line: " << __LINE__ << " File: " << __FILE__ << endl; Utility::RunTimeError("Dimensions does not match!"); } int r = real.Rows(); int c = real.Columns(); int l = real.Length(); Matrix<ComplexDouble> temp(r,c); for(int i=0; i<l; i++) { temp.ElemNC(i) = ComplexDouble(real.ElemNC(i), imag.ElemNC(i)); } return temp; } //Vector<ComplexFloat> Conj(Vector<ComplexFloat> &c) //{ // Vector<ComplexFloat> copy = c.Clone(); // float *temp = reinterpret_cast<float*>(copy.Data()); // for(int i=1; i<2*copy.Length(); i+=2) // { // temp[i] = -temp[i]; // } // return copy; //} //Vector<ComplexDouble> Conj(Vector<ComplexDouble> &c) //{ // Vector<ComplexDouble> copy = c.Clone(); // double *temp = reinterpret_cast<double*>(copy.Data()); // for(int i=1; i<2*copy.Length(); i+=2) // { // temp[i] = -temp[i]; // } // return copy; //} //Matrix<ComplexFloat> Conj(Matrix<ComplexFloat> &c) //{ // Matrix<ComplexFloat> copy = c.Clone(); // float *temp = reinterpret_cast<float*>(copy.Data()); // for(int i=1; i<2*copy.Length(); i+=2) // { // temp[i] = -temp[i]; // } // return copy; //} //Matrix<ComplexDouble> Conj(Matrix<ComplexDouble> &c) //{ // Matrix<ComplexDouble> copy = c.Clone(); // double *temp = reinterpret_cast<double*>(copy.Data()); // for(int i=1; i<2*copy.Length(); i+=2) // { // temp[i] = -temp[i]; // } // return copy; //} };